package com.example.demo.util;


import com.baidu.aip.imageclassify.AipImageClassify;
import com.example.demo.model.Dishes;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.stereotype.Component;

import java.util.HashMap;

@Component
public class RecognizeUtil {
    // 设置APPID/AK/SK
    private static final String APP_ID = "52007337";
    private static final String API_KEY = "RlAb5sg0ZGuOcWhBN9G8WD44";
    private static final String SECRET_KEY = "VYHjhGxehxUaQv9rr6HrtHGOcNpqdpW1";

    public static Dishes Recognize(String imagePath) {
        // 初始化一个AipImageClassify
        AipImageClassify client = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);

        Dishes dish=null;
        try {
            // 调用接口
            HashMap<String, String> options = new HashMap<String, String>();
            options.put("top_num", "3");
            options.put("filter_threshold", "0.7");
            options.put("baike_num", "5");
            JSONObject res = client.dishDetect(imagePath,options);
//            JSONObject res = client.dishDetect("D:\\software\\baiduSDK\\test\\th.jpg",options);
            System.out.println(res.toString(2));  // 打印结果

            // 获取百度百科链接、描述和图片
            if (res.has("result")) {
                JSONArray resultArray = res.getJSONArray("result");
                if (resultArray.length() > 0) {
                    JSONObject firstDish = resultArray.getJSONObject(0);
                    // 获取菜品描述信息
                    JSONObject baikeInfo = firstDish.getJSONObject("baike_info");
                    String name = firstDish.optString("name");
                    String  calorie = firstDish.optString("calorie");
                    int calorie1=Integer.parseInt(calorie);
                    String description = baikeInfo.optString("description");
                    String baikeUrl = baikeInfo.optString("baike_url");
                    String imageUrl = baikeInfo.optString("image_url");
                     dish= new Dishes (name,description,imageUrl);
                    System.out.println("百度百科链接：" + baikeUrl);
                    System.out.println("百度百科描述：" + description);
                    System.out.println("百度百科图片：" + imageUrl);
                }
            }
    } catch (org.json.JSONException e) {
            e.printStackTrace();  // 打印异常信息
        }
        return dish;
    }
}
//public class recognizeUtil {
//    // 设置API Key和Secret Key
//    private static final String API_KEY = "RlAb5sg0ZGuOcWhBN9G8WD44";
//    private static final String SECRET_KEY = "VYHjhGxehxUaQv9rr6HrtHGOcNpqdpW1";
//
//    // 设置获取access token的地址和参数
//    private static final String AUTH_HOST = "https://aip.baidubce.com/oauth/2.0/token";
//    private static final String AUTH_PARAMS;
//
//    static {
//        try {
//            AUTH_PARAMS = "grant_type=client_credentials" +
//                    "&client_id=" + URLEncoder.encode(API_KEY, "UTF-8") +
//                    "&client_secret=" + URLEncoder.encode(SECRET_KEY, "UTF-8");
//        } catch (UnsupportedEncodingException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    // 设置图像识别的接口地址和参数
//    private static final String IMAGE_HOST = "https://aip.baidubce.com/api/v1/solution/direct/imagerecognition/combination";
//    private static final String SCENES = "[\"dishs\"]"; // 指定要调用的模型服务,"plant","ingredient","dishs", "red_wine","currency","landmark"
//    private static final String IMAGE = new String(getImageBase64("D:\\1.jpg")) ; // 图像数据，base64编码
//
//    // 定义一个获取access token的方法
//    public static String getAccessToken() {
//        try {
//            // 创建一个URL对象，并传入获取access token的地址和参数
//            URL url = new URL(AUTH_HOST + "?" + AUTH_PARAMS);
//
//            // 打开一个连接对象，并设置相关的属性
//            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//            conn.setRequestMethod("GET"); // 请求方法
//            conn.setConnectTimeout(5000); // 连接超时时间
//            conn.setReadTimeout(5000); // 读取超时时间
//
//            // 获取连接对象的输入流，并使用一个缓冲读取器来读取返回值
//            InputStream in = conn.getInputStream();
//            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
//            StringBuilder sb = new StringBuilder();
//            String line = null;
//            while ((line = reader.readLine()) != null) {
//                sb.append(line);
//            }
//
//            // 将返回值转换为一个JSON对象，并解析其中的数据项，获取access token
//            JSONObject json = new JSONObject(sb.toString());
//            String accessToken = json.getString("access_token");
//
//            // 关闭连接
//            conn.disconnect();
//
//            // 返回access token
//            return accessToken;
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    // 定义一个调用图像识别接口的方法
//    public static void imageRecognition(String accessToken) {
//        try {
//            // 创建另一个URL对象，并传入图像识别的接口地址和参数
//            URL imageUrl = new URL(IMAGE_HOST + "?access_token=" + accessToken);
//
//            // 打开另一个连接对象，并设置相关的属性
//            HttpURLConnection imageConn = (HttpURLConnection) imageUrl.openConnection();
//            imageConn.setRequestMethod("POST"); // 请求方法
//            imageConn.setConnectTimeout(5000); // 连接超时时间
//            imageConn.setReadTimeout(5000); //
//            imageConn.setDoOutput(true);
//            imageConn.setDoInput(true);
//            imageConn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); // 请求头
//
//            // 获取另一个连接对象的输出流，并使用一个数据输出流来写入请求体，包含要识别的图片数据
//            OutputStream out = imageConn.getOutputStream();
//            DataOutputStream writer = new DataOutputStream(out);
//            writer.writeBytes("{\"scenes\":" + SCENES + ",\"image\":\"" + IMAGE + "\"}"); // 请求体
//            writer.flush();
//            writer.close();
//
//            // 获取另一个连接对象的输入流，并使用另一个缓冲读取器来读取返回值
//            InputStream imageIn = imageConn.getInputStream();
//            BufferedReader imageReader = new BufferedReader(new InputStreamReader(imageIn));
//            StringBuilder imageSb = new StringBuilder();
//            String imageLine = null;
//            while ((imageLine = imageReader.readLine()) != null) {
//                imageSb.append(imageLine);
//            }
//
//            // 将返回值转换为另一个JSON对象，并解析其中的数据项，获取图片识别的结果
//            JSONObject imageJson = new JSONObject(imageSb.toString());
//            JSONObject result = imageJson.getJSONObject("result"); // 返回结果json串
//
//            // 打印或显示图片识别的结果
//            System.out.println(result.toString());
//
//            // 关闭连接
//            imageConn.disconnect();
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//    // 定义一个获取图片并转为base64编码的方法
//    public static String getImageBase64(String imagePath) {
//        try {
//            // 创建一个文件对象，并传入图片的地址
//            File file = new File(imagePath);
//
//            // 创建一个文件输入流对象，并传入文件对象
//            FileInputStream fis = new FileInputStream(file);
//
//            // 创建一个字节数组，用来存储图片数据
//            byte[] data = new byte[(int) file.length()];
//
//            // 从文件输入流中读取图片数据到字节数组中
//            fis.read(data);
//
//            // 关闭文件输入流
//            fis.close();
//
//            // 使用Base64类的方法，将字节数组转为base64编码的字符串
//            String imageBase64 = Base64.getEncoder().encodeToString(data);
//
//            // 返回base64编码的字符串
//            return imageBase64;
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
////    // 定义一个主方法，用来运行程序
////    public static void main(String[] args) {
////        // 获取access token
////        String accessToken = getAccessToken();
////        // 调用图像识别接口
////        imageRecognition(accessToken);
////    }


//

